package com.weishuang.monitor.leader.service.impl;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.Page;
import com.weishuang.monitor.leader.commons.entity.BaseEntity;
import com.weishuang.monitor.leader.commons.enums.ICODE;
import com.weishuang.monitor.leader.commons.enums.SCODE;
import com.weishuang.monitor.leader.commons.exception.CustomException;
import com.weishuang.monitor.leader.entity.ServersBaseInfo;
import com.weishuang.monitor.leader.entity.dto.ServersBaseInfoDTO;
import com.weishuang.monitor.leader.entity.vo.ServersBaseInfoVO;
import com.weishuang.monitor.leader.mapper.ServersBaseInfoMapper;
import com.weishuang.monitor.leader.service.IServersBaseInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * 服务器基本信息表 服务实现类
 * </p>
 *
 * @author weishuang
 * @since 2021-03-23
 */
@Service
public class ServersBaseInfoServiceImpl extends ServiceImpl<ServersBaseInfoMapper, ServersBaseInfo> implements IServersBaseInfoService {

    /**
     * 服务器上线推送信息
     * @param serversBaseInfo
     */
    @Override
    public void onlineServer(ServersBaseInfo serversBaseInfo) {
        ServersBaseInfo sbi = baseMapper.selectById(serversBaseInfo.getId());
        if (sbi == null || StringUtils.isBlank(sbi.getId())) {
            throw new CustomException(ICODE.DATA_NOT_FOND);
        }
        baseMapper.updateById(serversBaseInfo);
    }

    /**
     * 分页查询服务器列表
     * @param serversBaseInfoDTO
     * @return
     */
    @Override
    public Page<ServersBaseInfoVO> listPage(ServersBaseInfoDTO serversBaseInfoDTO) {
        serversBaseInfoDTO.startPage();
        List<ServersBaseInfoVO> serversBaseInfos = baseMapper.listPage(serversBaseInfoDTO);
        return (Page<ServersBaseInfoVO>) serversBaseInfos;
    }

    /**
     * 删除服务器
     * @param id
     */
    @Override
    public void deleteServer(String id) {
        LambdaUpdateWrapper<ServersBaseInfo> eq = Wrappers.lambdaUpdate(ServersBaseInfo.class).set(BaseEntity::getStatus, SCODE.STATUS_DELETE.getValue()).eq(ServersBaseInfo::getId, id);
        this.update(eq);
    }

    @Override
    public ServersBaseInfoVO getServerBaseInfoAndRunInfoById(String id) {
        return baseMapper.getServerBaseInfoAndRunInfoById(id);
    }
}
